home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
CWL2A_3.ARJ
/
MENU.H
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-13
|
15KB
|
392 lines
/*** MENU.H ***/
/* Written By P.A. McKenzie
* The C Window Library
* Copyright (C) 1990 All Rights Reserved
*/
#if !defined (MENU_DEF)
#define MENU_DEF 1
#include "window.h"
#include "bstring.h"
#undef PROTO_DEF
#include "proto.h"
#ifndef UNKNOWNARGS
#ifndef __cplusplus
#define UNKNOWNARGS
#else
#define UNKNOWNARGS ...
#endif
#endif
#if defined (MENU_GLOBAL_DEF)
#define MENU_EXTERN
#else
#define MENU_EXTERN extern
#endif
/* define offsets for pop-up menu keys */
#define POPUP_UPKEY 0
#define POPUP_DOWNKEY 1
#define POPUP_ACCEPTKEY 2
#define POPUP_QUITKEY 3
#define POPUP_HOMEKEY 4
#define POPUP_ENDKEY 5
#define POPUP_RIGHTKEY 6
#define POPUP_LEFTKEY 7
#define POPUP_PULLDOWN_QUITKEY 8
#define POPUP_PAGEUPKEY 9
#define POPUP_PAGEDOWNKEY 10
#define NUMPOPUPKEYS 11
#define PULLDOWN_EXIT 3
#define PULLDOWN_CONTINUE 5
/* define offsets for bar menu keys */
#define BAR_RIGHTKEY 0
#define BAR_LEFTKEY 1
#define BAR_ACCEPTKEY 2
#define BAR_QUITKEY 3
#define BAR_HOMEKEY 4
#define BAR_ENDKEY 5
#define NUMBARKEYS 6
#define NO_BAR_OPTIONS 0
#define BARWRAP 1
#define BARSTATIC 2
#define BARCONFIRM 4
#define BARDISPLAY 8
#define BAROVERRIDE 16
#define BARENHANCEDKEY 32
#define BARMOUSE 64
#define NO_POPUP_OPTIONS 0
#define POPUPWRAP 1
#define POPUPSTATIC 2
#define POPUPCONFIRM 4
#define POPUPDISPLAY 8
#define POPUPOVERRIDE 16
#define POPUPENHANCEDKEY 32
#define POPUPMOUSE 64
#define POPUPMOUSESCROLL 128
/********** Popup return values for user-defined functions **********/
#define KEEP_GETTING_INPUT 0
#define MOVE_CONTINUE_DONE -1
#define POPUP_CONTINUE -2
#define POPUP_MOVE_UP -3
#define POPUP_MOVE_DOWN -4
#define POPUP_DO_CHOICE -5
#define POPUP_MOVE_CONTINUE -6
#define POPUP_ESCAPE -7
#define POPUP_MOVE_LEFT -8
#define POPUP_MOVE_RIGHT -9
#define POPUP_MOVE_HOME -10
#define POPUP_MOVE_END -11
#define POPUP_PULLDOWN_QUIT -12
#define POPUP_MOVE_BAR_CHOICE -13
#define POPUP_MOVE_PAGEDOWN -14
#define POPUP_MOVE_PAGEUP -15
/* The following macros are used for compatibility with versions prior to
* Version 1.5 */
#define PULLDOWN_POPUP_EXIT POPUP_PULLDOWN_QUIT
#define POPUP_PULLDOWN_EXIT POPUP_PULLDOWN_QUIT
#define PULLDOWN_POPUP_QUIT POPUP_PULLDOWN_QUIT
#define POPUP_EXIT POPUP_ESCAPE
#define BAR_EXIT BAR_ESCAPE
/********** Bar return values for user-defined functions **********/
#define BAR_CONTINUE -14
#define BAR_MOVE_RIGHT -15
#define BAR_MOVE_LEFT -16
#define BAR_DO_CHOICE -17
#define BAR_MOVE_CONTINUE -18
#define BAR_ESCAPE -19
#define BAR_MOVE_HOME -20
#define BAR_MOVE_END -21
#define ENTRYCOLOR 0
#define BORDERCOLOR 1
#define HOTKEYCOLOR 2
#define HIGHLIGHTCOLOR 3
#define UNAVAILCOLOR 4
#define NUMPOPUPCOLORS 5
#define NUMBARCOLORS 5
#define MENU_PRESS 0
#define MENU_RELEASE 1
#define NUMMOUSEINFO 8
typedef struct
{
unsigned int wrap_around:1; /* menu highlight bar wrap */
unsigned int static_menu:1; /* menu is displayed while performing
* function */
unsigned int confirm_flag:1; /* confirmation function when hotkey is
* pressed */
unsigned int open_flag:1; /* menu is activated ? */
unsigned int pulldown_flag:1; /* menu is part of pulldown system? */
unsigned int display_flag:1; /* menu is displayed even after exiting? */
unsigned int override:1; /* unavailable entries are still processed? */
unsigned int enhanced_key:1; /* enhanced key flag */
unsigned int mouse_flag:1; /* tells if using mouse */
} POPUP_MENU_STATUS, BAR_MENU_STATUS;
typedef struct
{
char *entry_name;
unsigned row;
unsigned char hotkey_letter;
unsigned int ext_hotkey;
int (*func)(UNKNOWNARGS);
} POPUP_MENU_ENTRY, *POPUP_MENU_ENTRY_PTR;
typedef struct popmenu
{
WPOINTER w;
POPUP_MENU_ENTRY *menu_select;
unsigned menu_color[NUMPOPUPCOLORS];
unsigned menu_key[NUMPOPUPKEYS];
POPUP_MENU_STATUS popmenu_flags;
BITSTRING active_entry;
int pwidth;
unsigned last_entry;
int exp_method;
char *pulldown;
int (*confirm_func)(struct popmenu *, unsigned);
unsigned int mouse_scroll:1;
unsigned char popup_mouse_status[NUMMOUSEINFO];
} POPUP_MENU, *POPUP_MENU_PTR;
#define POPUP_WRAP_ON(p) (p)->popmenu_flags.wrap_around
#define POPUP_STATIC_ON(p) (p)->popmenu_flags.static_menu
#define POPUP_EXPLODE(p) (p)->popmenu_flags.explode_flag
#define POPUP_CONFIRM_ON(p) (p)->popmenu_flags.confirm_flag
#define POPUP_OPEN(p) (p)->popmenu_flags.open_flag
#define POPUP_PULLDOWN_ON(p) (p)->popmenu_flags.pulldown_flag
#define POPUP_DISPLAY_ON(p) (p)->popmenu_flags.display_flag
#define POPUP_OVERRIDE_ON(p) (p)->popmenu_flags.override
#define POPUP_ENHANCED_ON(p) (p)->popmenu_flags.enhanced_key
#define POPUP_MOUSE_ON(p) (p)->popmenu_flags.mouse_flag
#define POPUP_MOUSE_SCROLL_ON(p) (p)->mouse_scroll
#define S_UP_CHAR 0
#define S_DN_CHAR 1
#define S_UP_ATTR 2
#define S_DN_ATTR 3
#define S_UP_ROW 4
#define S_UP_COL 5
#define S_DN_ROW 6
#define S_DN_COL 7
#define POPUP_SCROLL_UP_CHAR(p) (p)->popup_mouse_status[S_UP_CHAR]
#define POPUP_SCROLL_DOWN_CHAR(p) (p)->popup_mouse_status[S_DN_CHAR]
#define POPUP_SCROLL_UP_ATTR(p) (p)->popup_mouse_status[S_UP_ATTR]
#define POPUP_SCROLL_DOWN_ATTR(p) (p)->popup_mouse_status[S_DN_ATTR]
#define POPUP_SCROLL_UP_ROW(p) (p)->popup_mouse_status[S_UP_ROW]
#define POPUP_SCROLL_UP_COLUMN(p) (p)->popup_mouse_status[S_UP_COL]
#define POPUP_SCROLL_DOWN_ROW(p) (p)->popup_mouse_status[S_DN_ROW]
#define POPUP_SCROLL_DOWN_COLUMN(p) (p)->popup_mouse_status[S_DN_COL]
void menu_init();
typedef struct
{
char *entry_name;
int row;
int col;
unsigned char hotkey_letter;
unsigned int ext_hotkey;
int (*func)(UNKNOWNARGS);
} BAR_MENU_ENTRY, *BAR_MENU_ENTRY_PTR;
typedef struct barmenu
{
WPOINTER w;
BAR_MENU_ENTRY *menu_select;
unsigned menu_color[NUMBARCOLORS];
unsigned menu_key[NUMBARKEYS];
BAR_MENU_STATUS barmenu_flags;
BITSTRING active_entry;
int *width;
int exp_method;
unsigned last_entry;
int (*confirm_func)(struct barmenu *, unsigned);
char *pulldown;
} BAR_MENU, *BAR_MENU_PTR;
#define BAR_WRAP_ON(b) (b)->barmenu_flags.wrap_around
#define BAR_STATIC_ON(b) (b)->barmenu_flags.static_menu
#define BAR_EXPLODE(b) (b)->barmenu_flags.explode_flag
#define BAR_CONFIRM_ON(b) (b)->barmenu_flags.confirm_flag
#define BAR_OPEN(b) (b)->barmenu_flags.open_flag
#define BAR_DISPLAY_ON(b) (b)->barmenu_flags.display_flag
#define BAR_OVERRIDE_ON(b) (b)->barmenu_flags.override
#define BAR_PULLDOWN_ON(b) (b)->barmenu_flags.pulldown_flag
#define BAR_ENHANCED_ON(b) (b)->barmenu_flags.enhanced_key
#define BAR_MOUSE_ON(b) (b)->barmenu_flags.mouse_flag
typedef struct pullmenu
{
BAR_MENU_PTR barmenu;
POPUP_MENU_PTR *popupmenu;
} PULLDOWN_MENU, *PULLDOWN_MENU_PTR;
PULLDOWN_MENU_PTR CreatePulldownMenu();
/* Up to here */
MENU_EXTERN int (*popup_undef_key) P((POPUP_MENU_PTR p, unsigned key,
unsigned *entry));
MENU_EXTERN int (*bar_undef_key) P((BAR_MENU_PTR b, unsigned key,
unsigned *entry));
MENU_EXTERN int (*global_bar_prefunc) P((BAR_MENU_PTR b, unsigned *selectptr));
MENU_EXTERN int (*global_popup_prefunc) P((POPUP_MENU_PTR p, unsigned *selectptr));
MENU_EXTERN void (*popup_mouse_move_func) P((POPUP_MENU_PTR p, unsigned sel));
MENU_EXTERN unsigned popup_key_definition[NUMPOPUPKEYS];
MENU_EXTERN unsigned bar_key_definition[NUMBARKEYS];
MENU_EXTERN unsigned current_popup_height;
MENU_EXTERN unsigned current_popup_width;
MENU_EXTERN unsigned current_bar_width;
MENU_EXTERN unsigned current_bar_height;
MENU_EXTERN unsigned popmenu_mouse_delay;
#if __cplusplus
extern "C"
{
#endif
BAR_MENU_ENTRY_PTR BarAllocate P((int numentry));
int BarAssignColors P((BAR_MENU_PTR barptr, unsigned *colors));
int BarAssignKeys P((BAR_MENU_PTR barptr, unsigned *keys));
int BarChangeEntryString P((BAR_MENU_PTR barptr, unsigned entry,
char *string));
void BarCreateEntry P((BAR_MENU_ENTRY *entry, int entrynum,
char *name, int row, int col, char hotkey,
unsigned int ext_hotkey,
int (*func)P((UNKNOWNARGS))));
BAR_MENU_PTR BarCreateMenu P((BAR_MENU_ENTRY *entries, unsigned *colors,
int row, int col, unsigned options,
WPOINTER (*wfunc)(void)));
void BarDeallocate P((BAR_MENU_ENTRY_PTR bentry));
void BarEntryEnd P((BAR_MENU_ENTRY_PTR entry, int numfields));
int BarMakeEntryAvailable P((BAR_MENU_PTR barptr, unsigned entry));
int BarMakeEntryUnavailable P((BAR_MENU_PTR barptr, unsigned entry));
int BarMenuFree P((BAR_MENU_PTR barptr));
int BarSetExplosionType P((BAR_MENU_PTR barptr, int effect));
int BarSetOptions P((BAR_MENU_PTR barptr, int options, int flag));
int BarSelectMenu P((BAR_MENU_PTR barptr, int rank,
unsigned entry));
int BarSetConfirmFunction P((BAR_MENU_PTR barptr,
int (*cfunc)(BAR_MENU_PTR, unsigned)));
POPUP_MENU_ENTRY_PTR PopupAllocate P((int numentry));
int PopupAssignColors P((POPUP_MENU_PTR popptr, unsigned *colors));
int PopupAssignKeys P((POPUP_MENU_PTR popptr, unsigned *keys));
void PopupCreateEntry P((POPUP_MENU_ENTRY_PTR entry, int entrynum,
char *name, unsigned row,
unsigned char hotkey,
unsigned int ext_hotkey,
int (*func)P((UNKNOWNARGS))));
POPUP_MENU_PTR PopupCreateMenu P((POPUP_MENU_ENTRY *entries, unsigned *colors,
unsigned row, unsigned col, int wheight,
unsigned options,
WPOINTER (*wfunc)(void),
VWPOINTER (*vwfunc)(void)));
void PopupDeallocate P((POPUP_MENU_ENTRY_PTR pentry));
void PopupEntryEnd P((POPUP_MENU_ENTRY_PTR entry, int numfields));
int PopupMakeEntryAvailable P((POPUP_MENU_PTR popptr,
unsigned entry));
int PopupMakeEntryUnavailable P((POPUP_MENU_PTR popptr,
unsigned entry));
int PopupSelectMenu P((POPUP_MENU_PTR popptr, int rank,
unsigned entry));
int PopupSetOptions P((POPUP_MENU_PTR popptr, unsigned options,
int flag));
int PopupChangeEntryString P((POPUP_MENU_PTR popptr,
unsigned entry, char *string));
int PopupSetExplosionType P((POPUP_MENU_PTR popptr, int effect));
int PopupSetConfirmFunction P((POPUP_MENU_PTR popptr,
int (*cfunc)(POPUP_MENU_PTR, unsigned)));
int PopupMenuFree P((POPUP_MENU_PTR popptr));
PULLDOWN_MENU_PTR PulldownCreateMenu P((POPUP_MENU_PTR popptrs[],
BAR_MENU_PTR barptr, int adjust));
int PulldownSelectMenu P((PULLDOWN_MENU_PTR pullptr, int rankbar,
unsigned startbar, int *rankpop,
unsigned *startpop,
int imode));
int PulldownMenuFree P((PULLDOWN_MENU_PTR pullptr));
int PulldownMenuFreeAll P((PULLDOWN_MENU_PTR pullptr));
#if defined (SOURCE)
#include "mintern.h"
#endif
#if __cplusplus
}
#endif
/* Other defines */
#define BAR_NULL_PTR ((BAR_MENU_PTR)0)
#define POPUP_NULL_PTR ((POPUP_MENU_PTR)0)
#define PULLDOWN_NULL_PTR ((PULLDOWN_MENU_PTR)0)
#define BAR_ENTRY_NULL ((BAR_MENU_ENTRY *)0)
#define POPUP_ENTRY_NULL ((POPUP_MENU_ENTRY *)0)
#define POPUP_STRING_IN_WINDOW(p,e) \
(((p)->w->vwrow+(p)->w->height-1) > ((p)->menu_select[(e)-1].row) ? 1:0)
#define POPUP_ENTRY_AVAILABLE(p,e) (test_bit(&(p)->active_entry,(e)-1))
#define POPUP_WINDOW(p) ((p)->w)
#define POPUP_VIRTUAL_WINDOW(p) ((p)->w->vwptr)
#define POPUP_ENTRY_STRING(p,e) ((p)->menu_select[(e)-1].entry_name)
#define POPUP_NUMBER_OF_ENTRIES(p) ((p)->active_entry.nbits)
#define BAR_ENTRY_AVAILABLE(b,e) (POPUP_ENTRY_AVAILABLE((b),(e)))
#define BAR_WINDOW(b) ((b)->w)
#define BAR_ENTRY_STRING(b,e) ((b)->menu_select[(e)-1].entry_name)
#define BAR_NUMBER_OF_ENTRIES(b) ((b)->active_entry.nbits)
#define PULLDOWN_MENU_PTR_FROM_BAR(b) \
((PULLDOWN_MENU_PTR)((b)->pulldown))
#define PULLDOWN_MENU_PTR_FROM_POPUP(p) \
((PULLDOWN_MENU_PTR)((p)->pulldown))
#define BAR_MENU_PTR_FROM_PULLDOWN(pull) ((pull)->barmenu)
#define POPUP_MENU_PTR_FROM_PULLDOWN(pull,entry) \
((pull)->popupmenu[(entry)-1])
#define BAR_MENU_PTR_FROM_POPUP(p) \
(BAR_MENU_PTR_FROM_PULLDOWN(PULLDOWN_MENU_PTR_FROM_POPUP(p)))
#define POPUP_MENU_PTR_FROM_BAR(b,entry) \
(POPUP_MENU_PTR_FROM_PULLDOWN(PULLDOWN_MENU_PTR_FROM_BAR(b),entry))
#endif